package top.zlhy7.service;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.io.File;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.SocketAddress;
import java.nio.charset.StandardCharsets;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 任勇
 * @date 2021/12/23 9:06
 * @description 行政区划
 */
@Slf4j
@Service
public class XzqhService {
    @Autowired
    private static RestTemplate restTemplate;
    static {
        SimpleClientHttpRequestFactory httpRequestFactory = new SimpleClientHttpRequestFactory();
        httpRequestFactory.setReadTimeout(3500);
        httpRequestFactory.setConnectTimeout(5000);
        SocketAddress address = new InetSocketAddress("proxy.xa.petrochina", 8080);
        Proxy proxy = new Proxy(Proxy.Type.HTTP, address);
        //没有代理就不用配下面这句
        httpRequestFactory.setProxy(proxy);
        restTemplate = new RestTemplate(httpRequestFactory);
    }
    /**
     * 正则 用于匹配最新行政区划编码页面url
     */
    public static final Pattern PATTERN1 = Pattern.compile("<a class=\"artitlelist\" href=\"(.*?)\".*");
    /**
     * 正则 用于匹配行政区划编码详情页面url
     */
    public static final Pattern PATTERN2 = Pattern.compile("<a class=\"artitlelist\" href=\"(.*?)\".*");

    /**
     * 处理h5源码，获取最新行政区划页面地址
     */
    public void handlerH5Source(){
        //1. 历年行政区划编码页面url
        String url = "http://www.mca.gov.cn/article/sj/xzqh/1980/";
        //String result = restTemplate.getForObject(url, String.class);
        String result = null;
        try {
            result = FileUtils.readFileToString(new File("D:\\ryProject\\spring-boot-practice\\test-selenium\\src\\main\\java\\top\\zlhy7\\service\\test.html"), StandardCharsets.UTF_8);
        } catch (IOException e) {
            e.printStackTrace();
        }
        log.info("历年行政区划编码行政区划H5源码:\n{}",result);
        //正则匹配要的部分，默认取第一个为最新
        Matcher matcher = PATTERN1.matcher(result);
        if (!matcher.find()) {
            return;
        }
        //2. 获取行政区划编码+行政区划变动 页面url
        //group是针对（）来说的，group（0）就是指的整个串，group（1） 指的是第一个括号里的东西，group（2）指的第二个括号里的东西。
        url = "http://www.mca.gov.cn"+matcher.group(1);
        log.info("获取最新行政区划页面url:{}",url);
        result = restTemplate.getForObject(url, String.class);
        log.info("行政区划编码+行政区划变动H5源码:\n{}",result);
        matcher = PATTERN2.matcher(result);
        if (!matcher.find()) {
            return;
        }
        //3. 获取行政区划编码+行政区划变动 页面url
        //group是针对（）来说的，group（0）就是指的整个串，group（1） 指的是第一个括号里的东西，group（2）指的第二个括号里的东西。
        url = "http://www.mca.gov.cn"+matcher.group(1);
    }

    public static void main(String[] args) {
        XzqhService xzqhService = new XzqhService();
        xzqhService.handlerH5Source();
    }
}
